package com.olclass.web.dao;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface DataBizMapper {

    /**
     * 根据自定义sql语句查询数据
     * @param sql
     * @return
     */
    List<Map> queryDataBySql(@Param("sql") String sql);

    /**
     * 根据自定义sql语句执行
     * @param sql
     * @return
     */
    void excuteSql(@Param("sql") String sql);

    /**
     * 根据表名称查询所有字段值
     * @param tableName 表名称
     * @return
     */
    List<Map> queryAllData(@Param("tableName") String tableName, @Param("fieldList") List<String> fieldList, @Param("where") String where);

    /**
     * 查询数据
     * @param tableName 表名称
     * @param fieldList 字段列表
     * @param pageSize 页码
     * @param startIndex
     * @param where
     * @return
     */
    List<Map> queryPageData(@Param("tableName") String tableName, @Param("fieldList") List<String> fieldList, @Param("pageSize") int pageSize, @Param("startIndex") int startIndex, @Param("where") String where);

    /**
     * 根据ID查询数据对象
     * @param tableName 表名称
     * @param primaryField 表主键字段名称
     * @param id 主键值
     * @return
     */
    Map selectByID(@Param("tableName") String tableName, @Param("primaryField") String primaryField, @Param("id") String id);

    /**
     * 根据ID查询数据对象
     * @param tableName 表名称
     * @param fieldList 字段列表
     * @param primaryField 表主键字段名称
     * @param id 主键值
     * @return
     */
    Map selectFieldByID(@Param("tableName") String tableName, @Param("fieldList") List<String> fieldList, @Param("primaryField") String primaryField, @Param("id") String id);

    /**
     * 查询数据总数量
     * @param tableName 表名称
     * @param where 条件
     * @return 数量
     */
    int getCount(@Param("tableName") String tableName, @Param("where") String where);

    /**
     * 插入数据
     *
     * @param tableName 表名称
     * @param map       数据Map对象
     * @return
     */
    int insert(@Param("tableName") String tableName, @Param("map") Map<String, Object> map, @Param("geofield") String geofield);

    /**
     * 批量插入输入
     *
     * @param tableName 表名称
     * @param valueList 数据集合
     * @param geofield  shp数据字段key
     * @return
     */
    int insertBatch(@Param("tableName") String tableName, @Param("valueList") List<Map<String, Object>> valueList, @Param("geofield") String geofield);

    /**
     * 更新数据
     *
     * @param tableName 表名称
     * @param map       更新值的Map对象
     * @param where     条件
     * @return
     */
    int update(@Param("tableName") String tableName, @Param("map") Map<String, Object> map, @Param("where") String where);

    /**
     * 删除数据
     * @param tableName 表名称
     * @param primaryField 表主键字段名称
     * @param id 主键值
     * @return
     */
    int delete(@Param("tableName") String tableName, @Param("primaryField") String primaryField, @Param("id") String id);

    /**
     * 根据条件删除数据
     * @param tableName 表名称
     * @param where 删除条件
     * @return
     */
    int deleteByCond(@Param("tableName") String tableName, @Param("where") String where);

    /**
     * 根据sql执行更新
     *
     * @param tableName 表名称
     * @param sql       更新语句
     * @param where     更新条件
     * @return
     */
    int updateBySql(@Param("tableName") String tableName, @Param("sql") String sql, @Param("where") String where);
}
